package com.aipartner.service;

import com.aipartner.dto.*;
import com.aipartner.entity.AdminOperationLog;
import com.aipartner.entity.AdminUser;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import javax.servlet.http.HttpServletRequest;

/**
 * 管理员服务接口
 */
public interface AdminService {
    
    /**
     * 管理员登录
     * @param request 登录请求
     * @param ip 登录IP
     * @return 登录响应
     */
    LoginResponse login(AdminLoginRequest request, String ip);
    
    /**
     * 根据用户名获取管理员信息
     * @param username 用户名
     * @return 管理员信息
     */
    AdminUser getByUsername(String username);
    
    /**
     * 根据ID获取管理员信息
     * @param id 管理员ID
     * @return 管理员信息
     */
    AdminUserResponse getAdminById(Long id);
    
    /**
     * 更新登录信息
     * @param adminId 管理员ID
     * @param ip 登录IP
     */
    void updateLoginInfo(Long adminId, String ip);
    
    /**
     * 记录操作日志
     * @param log 操作日志
     */
    void saveOperationLog(AdminOperationLog log);
    
    /**
     * 获取操作日志列表
     * @param page 分页参数
     * @param adminId 管理员ID（可选）
     * @param module 功能模块（可选）
     * @param operation 操作类型（可选）
     * @return 分页结果
     */
    Page<AdminOperationLog> getOperationLogs(Page<AdminOperationLog> page, Long adminId, String module, String operation);
    
    /**
     * 获取仪表盘统计数据
     * @return 统计数据
     */
    AdminStatsResponse getDashboardStats();
    
    /**
     * 获取管理员个人信息
     * @param adminId 管理员ID
     * @return 个人信息
     */
    AdminUser getProfile(Long adminId);
    
    /**
     * 更新管理员个人信息
     * @param adminId 管理员ID
     * @param request 更新请求
     * @return 是否成功
     */
    boolean updateProfile(Long adminId, AdminProfileRequest request);
    
    /**
     * 修改管理员密码
     * @param adminId 管理员ID
     * @param request 密码修改请求
     * @return 是否成功
     */
    boolean updatePassword(Long adminId, AdminPasswordRequest request);
    
    /**
     * 上传管理员头像
     * @param adminId 管理员ID
     * @param avatarUrl 头像URL
     * @return 是否成功
     */
    boolean updateAvatar(Long adminId, String avatarUrl);
}
